using System;
using JGSY.CMS.LowCode.Platform.Domain.Entities.Base;

namespace JGSY.CMS.LowCode.Platform.Domain.Entities
{
    /// <summary>
    /// 用户设备实体
    /// 用于记录和管理用户登录使用的设备信息
    /// 支持多租户数据隔离，确保每个租户的设备记录独立管理
    /// </summary>
    public class UserDevice : ITenantEntity
    {
        /// <summary>
        /// 用户设备记录标识符
        /// </summary>
        public long Id { get; set; }
        
        /// <summary>
        /// 租户ID
        /// 用于多租户数据隔离，确保每个租户的设备记录独立
        /// </summary>
        public string TenantId { get; set; } = string.Empty;
        
        /// <summary>
        /// 用户标识符
        /// 设备关联的用户ID
        /// </summary>
        public long UserId { get; set; }
        
        /// <summary>
        /// 用户信息
        /// 导航属性，指向设备关联的用户
        /// </summary>
        public User? User { get; set; }
        
        /// <summary>
        /// 设备标识符
        /// 设备的唯一标识符
        /// </summary>
        public string DeviceId { get; set; } = string.Empty;
        
        /// <summary>
        /// 设备名称
        /// 设备的显示名称或识别标识
        /// </summary>
        public string DeviceName { get; set; } = string.Empty;
        
        /// <summary>
        /// 设备类型
        /// 如：手机、电脑、平板等设备类型分类
        /// </summary>
        public string DeviceType { get; set; } = string.Empty;
        
        /// <summary>
        /// 浏览器信息
        /// 设备使用的浏览器类型和版本
        /// </summary>
        public string? Browser { get; set; }
        
        /// <summary>
        /// 操作系统
        /// 设备的操作系统类型和版本
        /// </summary>
        public string? Os { get; set; }
        
        /// <summary>
        /// 是否活跃
        /// 标识该设备是否处于活跃状态
        /// </summary>
        public bool IsActive { get; set; } = true;
        
        /// <summary>
        /// 是否为受信任设备
        /// 标识该设备是否被标记为可信任设备
        /// </summary>
        public bool IsTrusted { get; set; } = false;
        
        /// <summary>
        /// 首次使用时间
        /// 该设备首次登录系统的时间
        /// </summary>
        public DateTime FirstSeenAt { get; set; }
        
        /// <summary>
        /// 最后使用时间
        /// 该设备最近一次登录系统的时间
        /// </summary>
        public DateTime LastSeenAt { get; set; }
        
        /// <summary>
        /// 最后使用IP地址
        /// 该设备最近一次登录使用的IP地址
        /// </summary>
        public string? LastIpAddress { get; set; }
        
        /// <summary>
        /// 登录次数
        /// 该设备的累计登录次数
        /// </summary>
        public int LoginCount { get; set; } = 1;
        
        /// <summary>
        /// 推送通知令牌
        /// 用于推送消息的设备令牌
        /// </summary>
        public string? NotificationToken { get; set; }
    }
}
